package cn.vehicle.biz;

import cn.vehicle.domains.vo.BasePage;
import cn.vehicle.domains.vo.req.camera.*;
import cn.vehicle.domains.vo.res.camera.CameraRes;
import jakarta.validation.Valid;

public interface CameraBiz {
    /**
     * 新增相机
     *
     * @param req 新增相机请求参数
     */
    void addCamera(AddCameraReq req);

    /**
     * 更新相机
     *
     * @param req 更新相机请求参数，需包含主键ID
     */
    void updateCamera(UpdateCameraReq req);

    /**
     * 删除相机
     *
     * @param id 相机主键ID
     */
    void deleteCamera(Long id);

    /**
     * 根据ID查询相机详情
     *
     * @param id 相机主键ID
     * @return 相机详情
     */
    CameraRes getCameraById(Long id);

    /**
     * 分页查询相机列表
     *
     * @param req 查询条件与分页参数
     * @return 分页结果（相机列表）
     */
    BasePage<CameraRes> list(CameraListReq req);

    /**
     * 绑定相机（识别相机 ↔ 抓拍相机 1:1）
     *
     * <p>约束：发起方应为识别相机，目标应为抓拍相机，且双方均未形成其他绑定关系。</p>
     *
     * @param req 绑定请求参数
     */
    void bindCamera(BindCameraReq req);

    /**
     * 解绑相机（解除识别相机与抓拍相机的 1:1 绑定）
     *
     * @param req 解绑请求参数
     */
    void unBindCamera(UnBindCameraReq req);
}
